import os
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_context('notebook', font_scale=1.5, rc={'lines.markeredgewidth': 2})
sns.set_style('white', {'axes.spines.right': False, 'axes.spines.top': False, 'xtick.bottom': True, 'ytick.left': True, })
%load_ext autoreload
%autoreload 2
%matplotlib inline
import visual_behavior.data_access.loading as loading
from allensdk.brain_observatory.behavior.behavior_project_cache import VisualBehaviorOphysProjectCache
import visual_behavior_glm.GLM_params as glm_params
import visual_behavior_glm.GLM_analysis_tools as gat
import mindscope_utilities.general_utilities as ms_utils
import mindscope_utilities.visual_behavior_ophys.data_formatting as vb_ophys
import visual_behavior.visualization.utils as utils
cache_dir = loading.get_platform_analysis_cache_dir()
cache = VisualBehaviorOphysProjectCache.from_s3_cache(cache_dir)
experiments_table = loading.get_platform_paper_experiment_table()
experiment_id = experiments_table.index.values[10]
dataset = cache.get_behavior_ophys_experiment(experiment_id)
run_params = glm_params.load_run_json('20_events_all_L2_optimize_by_session')
results_pivoted = gat.build_pivoted_results_summary('adj_fraction_change_from_full', glm_version=run_params['version'])
weights_df = gat.build_weights_df(run_params, results_pivoted)
len(weights_df)
weights_df = weights_df.drop_duplicates(subset=['cell_specimen_id', 'ophys_experiment_id'])
weights_df = weights_df.reset_index()
weights_df['identifier'] = [str(weights_df.iloc[row]['ophys_experiment_id'])+'_'+str(weights_df.iloc[row]['cell_specimen_id']) for row in range(len(weights_df))]
weights_df = weights_df.set_index('identifier')
len(weights_df)
results_pivoted = results_pivoted.drop_duplicates(subset=['cell_specimen_id', 'ophys_experiment_id'])
results_pivoted = results_pivoted.reset_index()
# results_pivoted = results_pivoted.set_index('identifier')
len(results_pivoted)
kernels = gat.glm_params.define_kernels()
kernels['licks']
How can i be sure that these params are correct for version 20?
# get cells with high lick dropout
examples = results_pivoted[results_pivoted.licks<-0.7]
examples[['licks', 'running', 'behavioral']]
Why is the behavioral dropout zero in cases where the lick dropout is so high?
# get examples with high lick dropout
examples = results_pivoted[results_pivoted.licks<-0.7]
identifiers = examples.identifier.unique()
identifier = identifiers[0]
if 'MESO' in weights_df.loc[identifier]['equipment_name']:
frame_rate = 11.
else:
frame_rate = 31.
time_window = (kernels['licks']['offset'], kernels['licks']['offset']+kernels['licks']['length'])
t_array = ms_utils.get_time_array(t_start=time_window[0], t_end=time_window[1], sampling_rate=frame_rate, include_endpoint=False,)
plt.plot(t_array, weights_df.loc[identifier]['licks_weights'],'ko-')
plt.ylabel('weight')
Why is the licks dropout score so high when the weights are pretty low?
dataset = cache.get_behavior_ophys_experiment(experiment_id)
tidy_cell_df = vb_ophys.build_tidy_cell_df(dataset)
tidy_cell_df.tail()
cell_specimen_ids = tidy_cell_df.cell_specimen_id.unique()
cell_specimen_id = cell_specimen_ids[0]
event_times = dataset.licks.timestamps
data = tidy_cell_df[tidy_cell_df.cell_specimen_id==cell_specimen_id]
etr = ms_utils.event_triggered_response(data, t='timestamps', y='filtered_events', event_times=event_times,
t_start=-1, t_end=1, output_format='tidy',
output_sampling_rate=None, interpolate=False)
etr['cell_specimen_id'] = cell_specimen_id
etr.head()
sns.lineplot(data=etr, x='time', y='dff')
event_times = dataset.licks.timestamps
data = tidy_cell_df[tidy_cell_df.cell_specimen_id==cell_specimen_id]
etr = ms_utils.event_triggered_response(data, t='timestamps', y='dff', event_times=event_times,
t_start=-1, t_end=1, output_format='wide', include_endpoint=False,
output_sampling_rate=31, interpolate=True)
etr.head()
import visual_behavior.visualization.utils as utils
traces = etr.T.values
timestamps = etr.index.values
utils.plot_mean_trace(traces, timestamps, ylabel='dF/F', legend_label=None, color='k', interval_sec=0.5, xlim_seconds=[-1.01,1],
plot_sem=True, ax=None)
def get_etr_for_cell_specimen_id(dataset, cell_specimen_id, y, event_times, time_window=[-1,1], frame_rate=11):
tidy_cell_df = vb_ophys.build_tidy_cell_df(dataset)
data = tidy_cell_df[tidy_cell_df.cell_specimen_id==cell_specimen_id]
etr = ms_utils.event_triggered_response(data, t='timestamps', y=y, event_times=event_times,
t_start=time_window[0], t_end=time_window[1], output_format='wide',
include_endpoint=False, output_sampling_rate=frame_rate, interpolate=True)
return etr
def plot_etr_trace_for_cell_specimen_id(dataset, cell_specimen_id, y, event_times, time_window=[-1,1], frame_rate=11, ax=None):
etr = get_etr_for_cell_specimen_id(dataset, cell_specimen_id, y, event_times, time_window, frame_rate)
traces = etr.T.values
timestamps = etr.index.values
utils.plot_mean_trace(traces, timestamps, ylabel=y, legend_label=None, color='k',
interval_sec=1, xlim_seconds=time_window, plot_sem=True, ax=ax)
return ax
# get cells with high lick dropouts
examples = results_pivoted[results_pivoted.licks<-0.7]
save_dir = r'\\allen\programs\braintv\workgroups\nc-ophys\visual_behavior\platform_paper_plots\GLM_examples'
example = examples.iloc[0]
identifier = example.identifier
cell_specimen_id = example.cell_specimen_id
ophys_experiment_id = example.ophys_experiment_id
dataset = cache.get_behavior_ophys_experiment(ophys_experiment_id)
event_times = dataset.licks.timestamps
y = 'dff'
if 'MESO' in weights_df.loc[identifier]['equipment_name']:
frame_rate = 11.
else:
frame_rate = 31.
time_window = (kernels['licks']['offset'], kernels['licks']['offset']+kernels['licks']['length'])
t_array = ms_utils.get_time_array(t_start=time_window[0], t_end=time_window[1], sampling_rate=frame_rate, include_endpoint=False,)
figsize=(15,4)
fig, ax = plt.subplots(1, 3, figsize=figsize)
ax = ax.ravel()
ax[0].plot(t_array, weights_df.loc[identifier]['licks_weights'],'ko-')
ax[0].set_ylabel('weight')
ax[1] = plot_etr_trace_for_cell_specimen_id(dataset, cell_specimen_id, 'filtered_events', event_times, time_window, frame_rate, ax=ax[1])
ax[2] = plot_etr_trace_for_cell_specimen_id(dataset, cell_specimen_id, 'dff', event_times, time_window, frame_rate, ax=ax[2])
lick_dropout = np.round(example.licks, 3)
behavioral_dropout = np.round(example.behavioral, 3)
metadata_string = utils.get_metadata_string(dataset.metadata)
plt.suptitle(str(cell_specimen_id)+'_'+metadata_string+'\nlick_dropout = '+str(lick_dropout)+', behavioral dropout = '+str(behavioral_dropout), x=0.52, y=1.1, fontsize=16)
fig.tight_layout()
if save_dir:
folder = 'lick_kernel'
filename = str(cell_specimen_id)+'_'+metadata_string+'_licks_'+y
utils.save_figure(fig, figsize, save_dir, folder, filename)
examples = results_pivoted[results_pivoted.licks<-0.7]
examples
for i in range(len(examples))[2:]:
example = examples.iloc[i]
identifier = example.identifier
print(identifier)
cell_specimen_id = example.cell_specimen_id
ophys_experiment_id = example.ophys_experiment_id
dataset = cache.get_behavior_ophys_experiment(ophys_experiment_id)
event_times = dataset.licks.timestamps
if 'MESO' in weights_df.loc[identifier]['equipment_name']:
frame_rate = 11.
else:
frame_rate = 31.
time_window = (kernels['licks']['offset'], kernels['licks']['offset']+kernels['licks']['length'])
t_array = ms_utils.get_time_array(t_start=time_window[0], t_end=time_window[1], sampling_rate=frame_rate, include_endpoint=False,)
figsize=(15,4)
fig, ax = plt.subplots(1, 3, figsize=figsize)
ax = ax.ravel()
ax[0].plot(t_array, weights_df.loc[identifier]['licks_weights'],'ko-')
ax[0].set_ylabel('weight')
ax[1] = plot_etr_trace_for_cell_specimen_id(dataset, cell_specimen_id, 'filtered_events', event_times, time_window, frame_rate, ax=ax[1])
ax[2] = plot_etr_trace_for_cell_specimen_id(dataset, cell_specimen_id, 'dff', event_times, time_window, frame_rate, ax=ax[2])
lick_dropout = np.round(example.licks, 3)
behavioral_dropout = np.round(example.behavioral, 3)
metadata_string = utils.get_metadata_string(dataset.metadata)
plt.suptitle(metadata_string+'\nlick_dropout = '+str(lick_dropout)+', behavioral dropout = '+str(behavioral_dropout), x=0.52, y=1.1, fontsize=16)
fig.tight_layout()
if save_dir:
folder = 'lick_kernel'
filename = str(cell_specimen_id)+'_'+metadata_string+'_licks'
utils.save_figure(fig, figsize, save_dir, folder, filename)